package com.mixsmart.commonweb.utils;

import java.util.ArrayList;
import java.util.List;

import org.springframework.web.context.ContextLoader;
import org.springframework.web.context.WebApplicationContext;

/**
 * Spring工具类
 * @author lmq
 * @version 1.0
 * <br />
 * 创建日期：2016年5月30日
 */
public class SpringContextUtils {

	/**
	 * 根据给定的类型查找所有此类型的服务实例
	 * @param clazz
	 * @return
	 */
	public static <T> List<T> finds(Class<T> clazz) {
		WebApplicationContext applicationContext = ContextLoader.getCurrentWebApplicationContext();
		String[] beanNames = applicationContext.getBeanNamesForType(clazz);
		List<T> beans = null;
		if(null != beanNames && beanNames.length>0) {
			beans = new ArrayList<T>();
			for (String beanName : beanNames) {
				beans.add(applicationContext.getBean(beanName, clazz));
			}
		}
		return beans;
	}
	
	/**
	 * 根据给定的类型查找对应的实例
	 * @param clazz
	 * @return
	 */
	public static <T> T find(Class<T> clazz) {
		WebApplicationContext applicationContext = ContextLoader.getCurrentWebApplicationContext();
		return applicationContext.getBean(clazz);
	}
	
	/**
	 * 根据给定的名称查找对应的实例
	 * @param beanName
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public static <T> T find(String beanName) {
		WebApplicationContext applicationContext = ContextLoader.getCurrentWebApplicationContext();
		return (T) applicationContext.getBean(beanName);
	}
	
}
